﻿using System.Collections.Generic;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Zarion_Quest.Base
{
    public class Animation
    {
        /// <summary>
        /// Sprite Sheet da animação
        /// </summary>
        private Texture2D texture;
        public Texture2D Texture
        {
            get { return texture; }
        }

        /// <summary>
        /// Lista contendo a sequência de quadros da animação
        /// </summary>
        public List<Rectangle> Frames
        {
            get { return this.frames; }
        }
        private List<Rectangle> frames = new List<Rectangle>();

        /// <summary>
        /// Centro do retangulo de animação
        /// </summary>
        private Vector2 middlePoint;
        public Vector2 MiddlePoint
        {
            get { return middlePoint; }
            set { middlePoint = value; }
        }

        /// <summary>
        /// Intervalo de tempo de passagem dos frames da animação
        /// </summary>
        public float Interval
        {
            get { return this.interval; }
            set { this.interval = value; }
        }
        private float interval;

        /// <summary>
        /// Define se existe repetição na animação
        /// </summary>
        public bool IsLooping
        {
            get { return this.isLooping; }
            set { this.isLooping = value; }
        }
        private bool isLooping;

        /// <summary>
        /// Quantidade de frames da aniamação
        /// </summary>
        public int FramesCount
        {
            get { return this.framesCount; }
        }
        private int framesCount;

        /// <summary>
        /// Construtor da animação
        /// </summary>
        /// <param name="texture">Sprite Sheet da animação(pegar do AnimatedObject2D.SpriteSheetDictionary para facilitar)</param>
        /// <param name="frames">Lista contendo a sequência de quadros da animação(pegar do AnimatedObject2D.SpriteSheetDictionary para facilitar)</param>
        /// <param name="startFrame">Quadro inicial</param>
        /// <param name="framesCount">Quantidade de quadros</param>
        /// <param name="interval">Intervalo de tempo de passagem dos frames da animação</param>
        public Animation(Texture2D texture, List<Rectangle> frames, Vector2 middlePoint, int startFrame, int framesCount, float interval)
        {
            this.texture = texture;
            this.framesCount = framesCount;
            this.interval = interval;
            this.middlePoint = middlePoint;
            // Armazena os quadros referêntes a esta animação
            for (int i = startFrame; i < startFrame + framesCount; i++)
                Frames.Add(frames[i]);
        }
    }
}
